import * as XLSX from 'xlsx'
import { formatDate } from './date'

/**
 * 导出数据到 Excel 文件
 * @param {Array} data 要导出的数据
 * @param {Array} columns 列配置 [{ title: '标题', key: '字段名', formatter: 格式化函数 }]
 * @param {string} filename 文件名
 */
export function exportToExcel(data, columns, filename = '导出数据') {
  if (!data || !data.length || !columns || !columns.length) {
    console.error('导出数据或列配置为空')
    return
  }

  // 处理表头
  const headers = columns.map(col => col.title)
  
  // 处理数据行
  const rows = data.map(item => {
    return columns.map(col => {
      if (col.formatter && typeof col.formatter === 'function') {
        return col.formatter(item[col.key], item)
      }
      return item[col.key]
    })
  })
  
  // 合并表头和数据
  const worksheet = XLSX.utils.aoa_to_sheet([headers, ...rows])
  
  // 创建工作簿
  const workbook = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  
  // 生成文件名
  const finalFilename = `${filename}_${formatDate(new Date(), 'YYYY-MM-DD')}.xlsx`
  
  // 导出文件
  XLSX.writeFile(workbook, finalFilename)
}

/**
 * 将Blob数据或JSON数据保存为Excel文件
 * @param {Blob|Object} data Excel文件的Blob数据或包含简历数据的JSON对象
 * @param {string} filename 文件名
 */
export function saveExcelFile(data, filename = '导出数据') {
  const finalFilename = `${filename}_${formatDate(new Date(), 'YYYY-MM-DD')}.xlsx`
  
  // 如果是JSON数据（从API返回的处理后的简历数据）
  if (data && data.success && Array.isArray(data.data)) {
    const resumeData = data.data
    
    // 调试输出，查看数据结构
    console.log('准备导出的数据:', resumeData)
    if (resumeData.length > 0) {
      console.log('数据中的字段:', Object.keys(resumeData[0]))
      console.log('第一条数据样例:', resumeData[0])
    }
    
    // 定义列配置 - 确保所有字段都被包含
    const columns = [
      { title: 'ID', key: 'id' },
      { title: '姓名', key: 'name' },
      { title: '手机号', key: 'phone' },
      { title: '微信', key: 'wechat' },
      { title: '性别', key: 'gender' },
      { title: '年龄', key: 'age' },
      { title: '体重(kg)', key: 'weight' },
      { title: '学历', key: 'education' },
      { title: '可否饮酒', key: 'can_drink' },
      { title: '能否直播', key: 'can_livestream' },
      { title: '是否能接受夜班', key: 'accept_night_shift' },
      { title: '期望工作时间', key: 'preferred_shift' },
      { title: '游戏经验', key: 'game_experience' },
      { title: '兴趣爱好', key: 'hobbies' },
      { title: '才艺展示', key: 'special_skills' },
      { title: '自我介绍', key: 'self_introduction' },
      { title: '每周空闲时间', key: 'weekly_availability' },
      { title: '工作经历', key: 'work_experience' },
      { title: '照片链接', key: 'photos' },
      { title: '状态', key: 'status' },
      { title: '邀请标题', key: 'invitationTitle' },
      { title: '职位', key: 'position' },
      { title: '部门', key: 'department' },
      { title: '提交时间', key: 'created_at' }
    ]
    
    // 创建一个包含所有列的工作表
    const ws = XLSX.utils.json_to_sheet(
      resumeData.map(item => {
        // 确保每个字段都有值，避免undefined
        const row = {}
        columns.forEach(col => {
          row[col.key] = item[col.key] !== undefined ? item[col.key] : ''
        })
        return row
      }),
      { header: columns.map(col => col.key), skipHeader: true }
    )
    
    // 添加表头
    XLSX.utils.sheet_add_aoa(ws, [columns.map(col => col.title)], { origin: 'A1' })
    
    // 创建工作簿
    const wb = XLSX.utils.book_new()
    XLSX.utils.book_append_sheet(wb, ws, '简历数据')
    
    // 导出文件
    XLSX.writeFile(wb, finalFilename)
    return
  }
  
  // 如果是Blob数据（旧的导出方式）
  if (data instanceof Blob) {
    // 创建下载链接
    const link = document.createElement('a')
    link.href = URL.createObjectURL(data)
    link.download = finalFilename
    
    // 模拟点击下载
    document.body.appendChild(link)
    link.click()
    
    // 清理
    document.body.removeChild(link)
    URL.revokeObjectURL(link.href)
  } else {
    console.error('无效的数据格式', data)
  }
} 